

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Planning Scene &mdash; moveit_tutorials Kinetic documentation</title>
  

  
  
    <link rel="shortcut icon" href="../../_static/favicon.ico"/>
  

  

  
  
    

  

  
  
    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
  

  
    <link rel="stylesheet" href="../../_static/override.css" type="text/css" />
  

  
    <link rel="top" title="moveit_tutorials Kinetic documentation" href="../../index.html"/>
        <link rel="next" title="Planning Scene ROS API" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html"/>
        <link rel="prev" title="Robot Model and Robot State" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html"/> 

  
  <script src="../../_static/js/modernizr.min.js"></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-108532843-1"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'UA-108532843-1');
  </script>

</head>

<body class="wy-body-for-nav" role="document">

  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-nav-search">
        

        <a href="../../index.html">
          <img src="../../_static/logo.png"/>
          <span>Planning Framework</span>
        </a>

        
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

        
      </div>

      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
        
          
          
              <ul>
<li class="toctree-l1"><a class="reference internal" href="../getting_started/getting_started.html">Getting Started</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#install-ros-and-catkin">Install ROS and Catkin</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#install-moveit">Install MoveIt!</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#create-a-catkin-workspace">Create A Catkin Workspace</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#download-the-example-code">Download the Example Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#build-your-catkin-workspace">Build your Catkin Workspace</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting_started/getting_started.html#next-step">Next Step</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html">MoveIt! Quickstart in RViz</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#step-1-launch-the-demo-and-configure-the-plugin">Step 1: Launch the Demo and Configure the Plugin</a></li>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#step-2-play-with-the-visualized-robots">Step 2: Play with the Visualized Robots</a></li>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#step-3-interact-with-the-panda">Step 3: Interact with the Panda</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#moving-into-collision">Moving into collision</a></li>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#moving-out-of-reachable-workspace">Moving out of Reachable Workspace</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#step-4-use-motion-planning-with-the-panda">Step 4: Use Motion Planning with the Panda</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#introspecting-trajectory-waypoints">Introspecting Trajectory Waypoints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#next-steps">Next Steps</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#rviz-visual-tools">RViz Visual Tools</a></li>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#saving-your-configuration">Saving Your Configuration</a></li>
<li class="toctree-l3"><a class="reference internal" href="../quickstart_in_rviz/quickstart_in_rviz_tutorial.html#next-tutorials">Next Tutorials</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html">Move Group C++ Interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#setup">Setup</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#visualization">Visualization</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#getting-basic-information">Getting Basic Information</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#start-the-demo">Start the demo</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#planning-to-a-pose-goal">Planning to a Pose goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#visualizing-plans">Visualizing plans</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#moving-to-a-pose-goal">Moving to a pose goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#planning-to-a-joint-space-goal">Planning to a joint-space goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#planning-with-path-constraints">Planning with Path Constraints</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#cartesian-paths">Cartesian Paths</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#adding-removing-objects-and-attaching-detaching-objects">Adding/Removing Objects and Attaching/Detaching Objects</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_interface/move_group_interface_tutorial.html#the-launch-file">The Launch File</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html">Move Group Python Interface</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#start-rviz-and-movegroup-node">Start RViz and MoveGroup node</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#getting-basic-information">Getting Basic Information</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#planning-to-a-joint-goal">Planning to a Joint Goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#planning-to-a-pose-goal">Planning to a Pose Goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#cartesian-paths">Cartesian Paths</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#displaying-a-trajectory">Displaying a Trajectory</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#executing-a-plan">Executing a Plan</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#adding-objects-to-the-planning-scene">Adding Objects to the Planning Scene</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#ensuring-collision-updates-are-receieved">Ensuring Collision Updates Are Receieved</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#attaching-objects-to-the-robot">Attaching Objects to the Robot</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#detaching-objects-from-the-robot">Detaching Objects from the Robot</a></li>
<li class="toctree-l3"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#removing-objects-from-the-planning-scene">Removing Objects from the Planning Scene</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../move_group_python_interface/move_group_python_interface_tutorial.html#the-launch-file">The Launch File</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../moveit_commander_scripting/moveit_commander_scripting_tutorial.html">MoveIt! Commander Scripting</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../moveit_commander_scripting/moveit_commander_scripting_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../moveit_commander_scripting/moveit_commander_scripting_tutorial.html#starting-rviz-and-the-command-line-tool">Starting RViz and the Command Line Tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="../moveit_commander_scripting/moveit_commander_scripting_tutorial.html#using-the-moveit-commander-command-line-tool">Using the MoveIt! Commander Command Line Tool</a></li>
</ul>
</li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html">Robot Model and Robot State</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#the-robotmodel-and-robotstate-classes">The RobotModel and RobotState Classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#start">Start</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#get-joint-values">Get Joint Values</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#joint-limits">Joint Limits</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#forward-kinematics">Forward Kinematics</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#inverse-kinematics">Inverse Kinematics</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#get-the-jacobian">Get the Jacobian</a></li>
<li class="toctree-l3"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#the-launch-file">The Launch File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html#debugging-the-robot-state">Debugging the Robot State</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="">Planning Scene</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="#the-entire-code">The entire code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#setup">Setup</a></li>
<li class="toctree-l3"><a class="reference internal" href="#collision-checking">Collision Checking</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#self-collision-checking">Self-collision checking</a></li>
<li class="toctree-l4"><a class="reference internal" href="#change-the-state">Change the state</a></li>
<li class="toctree-l4"><a class="reference internal" href="#checking-for-a-group">Checking for a group</a></li>
<li class="toctree-l4"><a class="reference internal" href="#getting-contact-information">Getting Contact Information</a></li>
<li class="toctree-l4"><a class="reference internal" href="#modifying-the-allowed-collision-matrix">Modifying the Allowed Collision Matrix</a></li>
<li class="toctree-l4"><a class="reference internal" href="#full-collision-checking">Full Collision Checking</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#constraint-checking">Constraint Checking</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#checking-kinematic-constraints">Checking Kinematic Constraints</a></li>
<li class="toctree-l4"><a class="reference internal" href="#user-defined-constraints">User-defined constraints</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#the-launch-file">The launch file</a></li>
<li class="toctree-l2"><a class="reference internal" href="#running-the-code">Running the code</a></li>
<li class="toctree-l2"><a class="reference internal" href="#expected-output">Expected Output</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html">Planning Scene ROS API</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#running-the-code">Running the code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#the-entire-code">The entire code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#visualization">Visualization</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#ros-api">ROS API</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#advertise-the-required-topic">Advertise the required topic</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#define-the-attached-object-message">Define the attached object message</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#add-an-object-into-the-environment">Add an object into the environment</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#interlude-synchronous-vs-asynchronous-updates">Interlude: Synchronous vs Asynchronous updates</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#attach-an-object-to-the-robot">Attach an object to the robot</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#detach-an-object-from-the-robot">Detach an object from the robot</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#remove-the-object-from-the-collision-world">Remove the object from the collision world</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#the-launch-file">The launch file</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html#debugging-the-planning-scene-monitor">Debugging the Planning Scene Monitor</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html">Motion Planning API</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#running-the-demo">Running the Demo</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#start">Start</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#visualization">Visualization</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#pose-goal">Pose Goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#visualize-the-result">Visualize the result</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#joint-space-goals">Joint Space Goals</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#adding-path-constraints">Adding Path Constraints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_api/motion_planning_api_tutorial.html#the-launch-file">The Launch File</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html">Motion Planning Pipeline</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#expected-output">Expected Output</a></li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#start">Start</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#visualization">Visualization</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#pose-goal">Pose Goal</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#visualize-the-result">Visualize the result</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#joint-space-goals">Joint Space Goals</a></li>
<li class="toctree-l3"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#using-a-planning-request-adapter">Using a Planning Request Adapter</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../motion_planning_pipeline/motion_planning_pipeline_tutorial.html#the-launch-file">The Launch File</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html">Visualizing Collisions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#classes">Classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#interacting">Interacting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#relevant-code">Relevant Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#initializing-the-planning-scene-and-markers">Initializing the Planning Scene and Markers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#collision-requests">Collision Requests</a></li>
<li class="toctree-l3"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#checking-for-collisions">Checking for Collisions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#displaying-collision-contact-points">Displaying Collision Contact Points</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../visualizing_collisions/visualizing_collisions_tutorial.html#launch-file">Launch file</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../time_parameterization/time_parameterization_tutorial.html">Time Parameterization</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../time_parameterization/time_parameterization_tutorial.html#speed-control">Speed Control</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../time_parameterization/time_parameterization_tutorial.html#from-file">From File</a></li>
<li class="toctree-l3"><a class="reference internal" href="../time_parameterization/time_parameterization_tutorial.html#during-runtime">During Runtime</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../time_parameterization/time_parameterization_tutorial.html#time-parameterization-algorithms">Time Parameterization Algorithms</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html">Planning with Approximated Constraint Manifolds</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#creating-the-constraint-database">Creating the Constraint Database</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#constraints-message">Constraints message</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#construction-options">Construction Options</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#graph-size">Graph size</a></li>
<li class="toctree-l4"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#edges">Edges</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#database-construction">Database Construction</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../planning_with_approximated_constraint_manifolds/planning_with_approximated_constraint_manifolds_tutorial.html#database-loading-and-usage">Database Loading and Usage</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../pick_place/pick_place_tutorial.html">Pick and Place Tutorial</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#running-the-demo">Running The Demo</a></li>
<li class="toctree-l2"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#understanding-moveit-msgs-grasp">Understanding <tt class="docutils literal"><span class="pre">moveit_msgs::Grasp</span></tt></a></li>
<li class="toctree-l2"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#the-entire-code">The Entire Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#creating-environment">Creating Environment</a></li>
<li class="toctree-l3"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#pick-pipeline">Pick Pipeline</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-grasp-pose">Setting grasp pose</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-pre-grasp-approach">Setting pre-grasp approach</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-post-grasp-retreat">Setting post-grasp retreat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-posture-of-eef-before-grasp">Setting posture of eef before grasp</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-posture-of-eef-during-grasp">Setting posture of eef during grasp</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#place-pipeline">Place Pipeline</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-place-location-pose">Setting place location pose</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-pre-place-approach">Setting pre-place approach</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#id2">Setting post-grasp retreat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../pick_place/pick_place_tutorial.html#setting-posture-of-eef-after-placing-object">Setting posture of eef after placing object</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html">MoveIt! Setup Assistant</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-1-start">Step 1: Start</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-2-generate-self-collision-matrix">Step 2: Generate Self-Collision Matrix</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-3-add-virtual-joints">Step 3: Add Virtual Joints</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-4-add-planning-groups">Step 4: Add Planning Groups</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-5-add-robot-poses">Step 5: Add Robot Poses</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-6-label-end-effectors">Step 6: Label End Effectors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-7-add-passive-joints">Step 7: Add Passive Joints</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-8-3d-perception">Step 8: 3D Perception</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-9-gazebo-simulation">Step 9: Gazebo Simulation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-10-ros-control">Step 10: ROS Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-11-add-author-information">Step 11: Add Author Information</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#step-12-generate-configuration-files">Step 12: Generate Configuration Files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#what-s-next">What&#8217;s Next</a></li>
<li class="toctree-l2"><a class="reference internal" href="../setup_assistant/setup_assistant_tutorial.html#additional-reading">Additional Reading</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html">URDF and SRDF</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#urdf">URDF</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#urdf-resources">URDF Resources</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#important-tips">Important Tips</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#special-characters-in-joint-names">Special Characters in Joint Names</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#safety-limits">Safety Limits</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#collision-checking">Collision Checking</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#test-your-urdf">Test your URDF</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#urdf-examples">URDF Examples</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#srdf">SRDF</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#virtual-joints">Virtual Joints</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#passive-joints">Passive Joints</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#groups">Groups</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#collection-of-joints">Collection of Joints</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#collection-of-links">Collection of Links</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#serial-chain">Serial Chain</a></li>
<li class="toctree-l4"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#collection-of-sub-groups">Collection of Sub-Groups</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#end-effectors">End-Effectors</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#self-collisions">Self-Collisions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#robot-poses">Robot Poses</a></li>
<li class="toctree-l3"><a class="reference internal" href="../urdf_srdf/urdf_srdf_tutorial.html#srdf-documentation">SRDF Documentation</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html">Low Level Controllers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#yaml-configuration">YAML Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#followjointtrajectory-controller-interface">FollowJointTrajectory Controller Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#grippercommand-controller-interface">GripperCommand Controller Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#optional-allowed-trajectory-execution-duration-parameters">Optional Allowed Trajectory Execution Duration Parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#create-the-controller-launch-file">Create the Controller launch file</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#debugging-information">Debugging Information</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#remapping-joint-states-topic">Remapping /joint_states topic</a></li>
<li class="toctree-l2"><a class="reference internal" href="../controller_configuration/controller_configuration_tutorial.html#trajectory-execution-manager-options">Trajectory Execution Manager Options</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html">Perception Pipeline Tutorial</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#configuration">Configuration</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#yaml-configuration-file-point-cloud">YAML Configuration file (Point Cloud)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#yaml-configuration-file-depth-map">YAML Configuration file (Depth Map)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#update-the-launch-file">Update the launch file</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#add-the-yaml-file-to-the-launch-script">Add the YAML file to the launch script</a></li>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#octomap-configuration">Octomap Configuration</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#obstacle-avoidance">Obstacle Avoidance</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#running-the-interface">Running the Interface</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#detecting-and-adding-object-as-collision-object">Detecting and Adding Object as Collision Object</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l3"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#relevant-code">Relevant Code</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#perception-related">Perception Related</a></li>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#storing-relevant-cylinder-values">Storing Relevant Cylinder Values</a></li>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#extracting-location-and-height">Extracting Location and Height</a></li>
<li class="toctree-l4"><a class="reference internal" href="../perception_pipeline/perception_pipeline_tutorial.html#adding-cylinder-to-planning-scene">Adding Cylinder to Planning Scene</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../ikfast/ikfast_tutorial.html">IKFast Kinematics Solver</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#what-is-ikfast">What is IKFast?</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#moveit-ikfast">MoveIt! IKFast</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#moveit-ikfast-installation">MoveIt! IKFast Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#openrave-installation">OpenRAVE Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#create-collada-file-for-use-with-openrave">Create Collada File For Use With OpenRAVE</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#parameters">Parameters</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#create-ikfast-solution-cpp-file">Create IKFast Solution CPP File</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#select-ik-type">Select IK Type</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#choose-planning-group">Choose Planning Group</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#identify-link-numbers">Identify Link Numbers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#generate-ik-solver">Generate IK Solver</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#create-plugin">Create Plugin</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#usage">Usage</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#test-the-plugin">Test the Plugin</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ikfast/ikfast_tutorial.html#updating-the-plugin">Updating the Plugin</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../trac_ik/trac_ik_tutorial.html">TRAC-IK Kinematics Solver</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../trac_ik/trac_ik_tutorial.html#install">Install</a></li>
<li class="toctree-l2"><a class="reference internal" href="../trac_ik/trac_ik_tutorial.html#usage">Usage</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html">Kinematics Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html#the-kinematics-yaml-file">The kinematics.yaml file</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html#parameters">Parameters</a></li>
<li class="toctree-l3"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html#the-kdl-kinematics-plugin">The KDL Kinematics Plugin</a></li>
<li class="toctree-l3"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html#the-lma-kinematics-plugin">The LMA Kinematics Plugin</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../kinematics_configuration/kinematics_configuration_tutorial.html#position-only-ik">Position Only IK</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../fake_controller_manager/fake_controller_manager_tutorial.html">Fake Controller Manager</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../fake_controller_manager/fake_controller_manager_tutorial.html#yaml-file-examples">YAML file examples</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../custom_constraint_samplers/custom_constraint_samplers_tutorial.html">Custom Constraint Samplers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../custom_constraint_samplers/custom_constraint_samplers_tutorial.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../custom_constraint_samplers/custom_constraint_samplers_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../custom_constraint_samplers/custom_constraint_samplers_tutorial.html#creating-a-constraint-sampler">Creating a constraint sampler</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html">OMPL Planner</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#ompl-settings">OMPL Settings</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#longest-valid-segment-fraction">Longest Valid Segment Fraction</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#projection-evaluator">Projection Evaluator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#enforce-planning-in-joint-space">Enforce Planning in Joint Space</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#other-settings">Other Settings</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#smoothing-paths">Smoothing Paths</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#determinism">Determinism</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#ompl-optimization-objectives">OMPL Optimization Objectives</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ompl_interface/ompl_interface_tutorial.html#post-processing-smoothing">Post-Processing Smoothing</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html">CHOMP Planner</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#using-chomp-with-your-robot">Using CHOMP with Your Robot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#running-the-demo">Running the Demo</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#running-chomp-with-obstacles-in-the-scene">Running CHOMP with Obstacles in the Scene</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#tweaking-some-of-the-parameters-for-chomp">Tweaking some of the parameters for CHOMP</a></li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#difference-between-plans-obtained-by-chomp-and-ompl">Difference between plans obtained by CHOMP and OMPL</a></li>
<li class="toctree-l2"><a class="reference internal" href="../chomp_planner/chomp_planner_tutorial.html#using-ompl-as-a-pre-processor-for-chomp">Using OMPL as a pre-processor for CHOMP</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html">STOMP Planner</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#installing-moveit-from-source">Installing MoveIt! from Source</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#using-stomp-with-your-robot">Using STOMP with Your Robot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#running-the-demo">Running the Demo</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#running-stomp-with-obstacles-in-the-scene">Running STOMP with Obstacles in the Scene</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#tweaking-some-of-the-parameters-for-stomp">Tweaking some of the parameters for STOMP</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#difference-between-plans-obtained-by-stomp-chomp-and-ompl">Difference between plans obtained by STOMP, CHOMP and OMPL</a></li>
<li class="toctree-l2"><a class="reference internal" href="../stomp_planner/stomp_planner_tutorial.html#running-stomp-unit-tests">Running STOMP Unit Tests</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html">Planning Adapter Tutorials</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#installing-moveit-from-source">Installing MoveIt! from Source</a></li>
<li class="toctree-l2"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#using-planning-request-adapter-with-your-motion-planner">Using Planning Request Adapter with Your Motion Planner</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#running-ompl-as-a-pre-processor-for-chomp">Running OMPL as a pre-processor for CHOMP</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#running-chomp-as-a-post-processor-for-stomp">Running CHOMP as a post-processor for STOMP</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#running-ompl-as-a-pre-processor-for-stomp">Running OMPL as a pre-processor for STOMP</a></li>
<li class="toctree-l3"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#running-stomp-as-a-post-processor-for-chomp">Running STOMP as a post-processor for CHOMP</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../planning_adapters/planning_adapters_tutorial.html#planning-insights-for-different-motion-planners-and-planners-with-planning-adapters">Planning Insights for different motion planners and planners with planning adapters</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joystick_control_teleoperation/joystick_control_teleoperation_tutorial.html">Joystick Control Teleoperation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joystick_control_teleoperation/joystick_control_teleoperation_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joystick_control_teleoperation/joystick_control_teleoperation_tutorial.html#running-the-code">Running the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joystick_control_teleoperation/joystick_control_teleoperation_tutorial.html#joystick-command-mappings">Joystick Command Mappings</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joystick_control_teleoperation/joystick_control_teleoperation_tutorial.html#debugging">Debugging</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html">Benchmarking</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#example">Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#viewing-results">Viewing Results</a></li>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#parameters-of-the-benchmarkoptions-class">Parameters of the BenchmarkOptions Class</a></li>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#parameters-of-the-benchmarkexecutor-class">Parameters of the BenchmarkExecutor Class</a></li>
<li class="toctree-l2"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#benchmarking-of-different-motion-planners-chomp-stomp-and-ompl">Benchmarking of Different Motion Planners: CHOMP, STOMP and OMPL</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#benchmarking-in-a-scene-without-obstacles">Benchmarking in a scene without obstacles</a></li>
<li class="toctree-l3"><a class="reference internal" href="../benchmarking/benchmarking_tutorial.html#benchmarking-in-a-scene-with-obstacles">Benchmarking in a scene with obstacles</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../tests/tests_tutorial.html">Integration/Unit Tests</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#getting-started">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#integration-test">Integration Test</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#test-robots">Test Robots</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#unit-tests">Unit Tests</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../tests/tests_tutorial.html#writing-unit-tests">Writing Unit Tests</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tests/tests_tutorial.html#running-unit-tests">Running Unit Tests</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#kinematic-tests">Kinematic Tests</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tests/tests_tutorial.html#code-coverage">Code Coverage</a></li>
</ul>
</li>
</ul>

          
        
      </div>
      &nbsp;
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
        <a href="../../index.html">moveit_tutorials</a>
      </nav>

      
      <div class="wy-nav-content">
        <div class="header-override">
          <p>
            <a href="http://moveit.ros.org">MoveIt! Website</a><br/>
          </p>
        </div>
        <div class="rst-content">
          <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li class="wy-breadcrumbs-aside">
      
        
          <a href="https://github.com/ros-planning/moveit_tutorials/blob/melodic-devel/doc/planning_scene/planning_scene_tutorial.rst" class="fa fa-github"> Edit on GitHub</a>
        
      
    </li>
    <li><a href="../../index.html">Docs</a> &raquo;</li>
      
    <li>Planning Scene</li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             <!-- <div class="admonition note">  -->
               <!-- <p class="first admonition-title">Code Used in this Tutorial Available</p>  -->
               <!-- <p class="last">Code can be found at <a href = "https://github.com/ros-planning/moveit_tutorials">moveit_tutorials repository</a> in doc folder. Use melodic-devel branch.</p> -->
             <!-- </div>  -->
            
  <div class="section" id="planning-scene">
<h1>Planning Scene<a class="headerlink" href="#planning-scene" title="Permalink to this headline">¶</a></h1>
<p>The <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classplanning__scene_1_1PlanningScene.html">PlanningScene</a> class provides the main interface that you will use
for collision checking and constraint checking. In this tutorial, we
will explore the C++ interface to this class.</p>
<div class="section" id="getting-started">
<h2>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h2>
<p>If you haven&#8217;t already done so, make sure you&#8217;ve completed the steps in <a class="reference external" href="../getting_started/getting_started.html">Getting Started</a>.</p>
</div>
<div class="section" id="the-entire-code">
<h2>The entire code<a class="headerlink" href="#the-entire-code" title="Permalink to this headline">¶</a></h2>
<p>The entire code can be seen <a class="reference external" href="https://github.com/ros-planning/moveit_tutorials/tree/melodic-devel/doc/planning_scene">here in the MoveIt! GitHub project</a>.</p>
<div class="section" id="setup">
<h3>Setup<a class="headerlink" href="#setup" title="Permalink to this headline">¶</a></h3>
<p>The <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classplanning__scene_1_1PlanningScene.html">PlanningScene</a> class can be easily setup and
configured using a <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classmoveit_1_1core_1_1RobotModel.html">RobotModel</a> or a URDF and
SRDF. This is, however, not the recommended way to instantiate a
PlanningScene. The <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_ros_planning/html/classplanning__scene__monitor_1_1PlanningSceneMonitor.html">PlanningSceneMonitor</a>
is the recommended method to create and maintain the current
planning scene (and is discussed in detail in the next tutorial)
using data from the robot&#8217;s joints and the sensors on the robot. In
this tutorial, we will instantiate a PlanningScene class directly,
but this method of instantiation is only intended for illustration.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">robot_model_loader</span><span class="o">::</span><span class="n">RobotModelLoader</span> <span class="n">robot_model_loader</span><span class="p">(</span><span class="s">&quot;robot_description&quot;</span><span class="p">);</span>
<span class="n">robot_model</span><span class="o">::</span><span class="n">RobotModelPtr</span> <span class="n">kinematic_model</span> <span class="o">=</span> <span class="n">robot_model_loader</span><span class="p">.</span><span class="n">getModel</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="o">::</span><span class="n">PlanningScene</span> <span class="n">planning_scene</span><span class="p">(</span><span class="n">kinematic_model</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="collision-checking">
<h3>Collision Checking<a class="headerlink" href="#collision-checking" title="Permalink to this headline">¶</a></h3>
<div class="section" id="self-collision-checking">
<h4>Self-collision checking<a class="headerlink" href="#self-collision-checking" title="Permalink to this headline">¶</a></h4>
<p>The first thing we will do is check whether the robot in its
current state is in <em>self-collision</em>, i.e. whether the current
configuration of the robot would result in the robot&#8217;s parts
hitting each other. To do this, we will construct a
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/structcollision__detection_1_1CollisionRequest.html">CollisionRequest</a> object and a
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/structcollision__detection_1_1CollisionResult.html">CollisionResult</a> object and pass them
into the collision checking function. Note that the result of
whether the robot is in self-collision or not is contained within
the result. Self collision checking uses an <em>unpadded</em> version of
the robot, i.e. it directly uses the collision meshes provided in
the URDF with no extra padding added on.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_detection</span><span class="o">::</span><span class="n">CollisionRequest</span> <span class="n">collision_request</span><span class="p">;</span>
<span class="n">collision_detection</span><span class="o">::</span><span class="n">CollisionResult</span> <span class="n">collision_result</span><span class="p">;</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkSelfCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 1: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="change-the-state">
<h4>Change the state<a class="headerlink" href="#change-the-state" title="Permalink to this headline">¶</a></h4>
<p>Now, let&#8217;s change the current state of the robot. The planning
scene maintains the current state internally. We can get a
reference to it and change it and then check for collisions for the
new robot configuration. Note in particular that we need to clear
the collision_result before making a new collision checking
request.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">robot_state</span><span class="o">::</span><span class="n">RobotState</span><span class="o">&amp;</span> <span class="n">current_state</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">getCurrentStateNonConst</span><span class="p">();</span>
<span class="n">current_state</span><span class="p">.</span><span class="n">setToRandomPositions</span><span class="p">();</span>
<span class="n">collision_result</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkSelfCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 2: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="checking-for-a-group">
<h4>Checking for a group<a class="headerlink" href="#checking-for-a-group" title="Permalink to this headline">¶</a></h4>
<p>Now, we will do collision checking only for the hand of the
Panda, i.e. we will check whether there are any collisions between
the hand and other parts of the body of the robot. We can ask
for this specifically by adding the group name &#8220;hand&#8221; to the
collision request.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_request</span><span class="p">.</span><span class="n">group_name</span> <span class="o">=</span> <span class="s">&quot;hand&quot;</span><span class="p">;</span>
<span class="n">current_state</span><span class="p">.</span><span class="n">setToRandomPositions</span><span class="p">();</span>
<span class="n">collision_result</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkSelfCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 3: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="getting-contact-information">
<h4>Getting Contact Information<a class="headerlink" href="#getting-contact-information" title="Permalink to this headline">¶</a></h4>
<p>First, manually set the Panda arm to a position where we know
internal (self) collisions do happen. Note that this state is now
actually outside the joint limits of the Panda, which we can also
check for directly.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">joint_values</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">2.9</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.4</span><span class="p">,</span> <span class="mf">0.0</span> <span class="p">};</span>
<span class="k">const</span> <span class="n">robot_model</span><span class="o">::</span><span class="n">JointModelGroup</span><span class="o">*</span> <span class="n">joint_model_group</span> <span class="o">=</span> <span class="n">current_state</span><span class="p">.</span><span class="n">getJointModelGroup</span><span class="p">(</span><span class="s">&quot;panda_arm&quot;</span><span class="p">);</span>
<span class="n">current_state</span><span class="p">.</span><span class="n">setJointGroupPositions</span><span class="p">(</span><span class="n">joint_model_group</span><span class="p">,</span> <span class="n">joint_values</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 4: Current state is &quot;</span>
                <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">current_state</span><span class="p">.</span><span class="n">satisfiesBounds</span><span class="p">(</span><span class="n">joint_model_group</span><span class="p">)</span> <span class="o">?</span> <span class="s">&quot;valid&quot;</span> <span class="o">:</span> <span class="s">&quot;not valid&quot;</span><span class="p">));</span>
</pre></div>
</div>
<p>Now, we can get contact information for any collisions that might
have happened at a given configuration of the Panda arm. We can ask
for contact information by filling in the appropriate field in the
collision request and specifying the maximum number of contacts to
be returned as a large number.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_request</span><span class="p">.</span><span class="n">contacts</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
<span class="n">collision_request</span><span class="p">.</span><span class="n">max_contacts</span> <span class="o">=</span> <span class="mi">1000</span><span class="p">;</span>
</pre></div>
</div>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_result</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkSelfCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 5: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
<span class="n">collision_detection</span><span class="o">::</span><span class="n">CollisionResult</span><span class="o">::</span><span class="n">ContactMap</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">it</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="n">it</span> <span class="o">=</span> <span class="n">collision_result</span><span class="p">.</span><span class="n">contacts</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it</span> <span class="o">!=</span> <span class="n">collision_result</span><span class="p">.</span><span class="n">contacts</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it</span><span class="p">)</span>
<span class="p">{</span>
  <span class="n">ROS_INFO</span><span class="p">(</span><span class="s">&quot;Contact between: %s and %s&quot;</span><span class="p">,</span> <span class="n">it</span><span class="o">-&gt;</span><span class="n">first</span><span class="p">.</span><span class="n">first</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">it</span><span class="o">-&gt;</span><span class="n">first</span><span class="p">.</span><span class="n">second</span><span class="p">.</span><span class="n">c_str</span><span class="p">());</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="section" id="modifying-the-allowed-collision-matrix">
<h4>Modifying the Allowed Collision Matrix<a class="headerlink" href="#modifying-the-allowed-collision-matrix" title="Permalink to this headline">¶</a></h4>
<p>The <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classcollision__detection_1_1AllowedCollisionMatrix.html">AllowedCollisionMatrix</a> (ACM)
provides a mechanism to tell the collision world to ignore
collisions between certain object: both parts of the robot and
objects in the world. We can tell the collision checker to ignore
all collisions between the links reported above, i.e. even though
the links are actually in collision, the collision checker will
ignore those collisions and return not in collision for this
particular state of the robot.</p>
<p>Note also in this example how we are making copies of both the
allowed collision matrix and the current state and passing them in
to the collision checking function.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_detection</span><span class="o">::</span><span class="n">AllowedCollisionMatrix</span> <span class="n">acm</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">getAllowedCollisionMatrix</span><span class="p">();</span>
<span class="n">robot_state</span><span class="o">::</span><span class="n">RobotState</span> <span class="n">copied_state</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">getCurrentState</span><span class="p">();</span>

<span class="n">collision_detection</span><span class="o">::</span><span class="n">CollisionResult</span><span class="o">::</span><span class="n">ContactMap</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">it2</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="n">it2</span> <span class="o">=</span> <span class="n">collision_result</span><span class="p">.</span><span class="n">contacts</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it2</span> <span class="o">!=</span> <span class="n">collision_result</span><span class="p">.</span><span class="n">contacts</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it2</span><span class="p">)</span>
<span class="p">{</span>
  <span class="n">acm</span><span class="p">.</span><span class="n">setEntry</span><span class="p">(</span><span class="n">it2</span><span class="o">-&gt;</span><span class="n">first</span><span class="p">.</span><span class="n">first</span><span class="p">,</span> <span class="n">it2</span><span class="o">-&gt;</span><span class="n">first</span><span class="p">.</span><span class="n">second</span><span class="p">,</span> <span class="nb">true</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">collision_result</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkSelfCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">,</span> <span class="n">copied_state</span><span class="p">,</span> <span class="n">acm</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 6: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="full-collision-checking">
<h4>Full Collision Checking<a class="headerlink" href="#full-collision-checking" title="Permalink to this headline">¶</a></h4>
<p>While we have been checking for self-collisions, we can use the
checkCollision functions instead which will check for both
self-collisions and for collisions with the environment (which is
currently empty).  This is the set of collision checking
functions that you will use most often in a planner. Note that
collision checks with the environment will use the padded version
of the robot. Padding helps in keeping the robot further away
from obstacles in the environment.*/</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">collision_result</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
<span class="n">planning_scene</span><span class="p">.</span><span class="n">checkCollision</span><span class="p">(</span><span class="n">collision_request</span><span class="p">,</span> <span class="n">collision_result</span><span class="p">,</span> <span class="n">copied_state</span><span class="p">,</span> <span class="n">acm</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 7: Current state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">collision_result</span><span class="p">.</span><span class="n">collision</span> <span class="o">?</span> <span class="s">&quot;in&quot;</span> <span class="o">:</span> <span class="s">&quot;not in&quot;</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; self collision&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="constraint-checking">
<h3>Constraint Checking<a class="headerlink" href="#constraint-checking" title="Permalink to this headline">¶</a></h3>
<p>The PlanningScene class also includes easy to use function calls
for checking constraints. The constraints can be of two types:
(a) constraints chosen from the
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classkinematic__constraints_1_1KinematicConstraint.html">KinematicConstraint</a> set:
i.e. <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classkinematic__constraints_1_1JointConstraint.html">JointConstraint</a>,
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classkinematic__constraints_1_1PositionConstraint.html">PositionConstraint</a>,
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classkinematic__constraints_1_1OrientationConstraint.html">OrientationConstraint</a> and
<a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/classkinematic__constraints_1_1VisibilityConstraint.html">VisibilityConstraint</a> and (b) user
defined constraints specified through a callback. We will first
look at an example with a simple KinematicConstraint.</p>
<div class="section" id="checking-kinematic-constraints">
<h4>Checking Kinematic Constraints<a class="headerlink" href="#checking-kinematic-constraints" title="Permalink to this headline">¶</a></h4>
<p>We will first define a simple position and orientation constraint
on the end-effector of the panda_arm group of the Panda robot. Note the
use of convenience functions for filling up the constraints
(these functions are found in the <a class="reference external" href="http://docs.ros.org/melodic/api/moveit_core/html/utils_8h.html">utils.h</a> file from the
kinematic_constraints directory in moveit_core).</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">end_effector_name</span> <span class="o">=</span> <span class="n">joint_model_group</span><span class="o">-&gt;</span><span class="n">getLinkModelNames</span><span class="p">().</span><span class="n">back</span><span class="p">();</span>

<span class="n">geometry_msgs</span><span class="o">::</span><span class="n">PoseStamped</span> <span class="n">desired_pose</span><span class="p">;</span>
<span class="n">desired_pose</span><span class="p">.</span><span class="n">pose</span><span class="p">.</span><span class="n">orientation</span><span class="p">.</span><span class="n">w</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
<span class="n">desired_pose</span><span class="p">.</span><span class="n">pose</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mf">0.3</span><span class="p">;</span>
<span class="n">desired_pose</span><span class="p">.</span><span class="n">pose</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.185</span><span class="p">;</span>
<span class="n">desired_pose</span><span class="p">.</span><span class="n">pose</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">;</span>
<span class="n">desired_pose</span><span class="p">.</span><span class="n">header</span><span class="p">.</span><span class="n">frame_id</span> <span class="o">=</span> <span class="s">&quot;panda_link0&quot;</span><span class="p">;</span>
<span class="n">moveit_msgs</span><span class="o">::</span><span class="n">Constraints</span> <span class="n">goal_constraint</span> <span class="o">=</span>
    <span class="n">kinematic_constraints</span><span class="o">::</span><span class="n">constructGoalConstraints</span><span class="p">(</span><span class="n">end_effector_name</span><span class="p">,</span> <span class="n">desired_pose</span><span class="p">);</span>
</pre></div>
</div>
<p>Now, we can check a state against this constraint using the
isStateConstrained functions in the PlanningScene class.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">copied_state</span><span class="p">.</span><span class="n">setToRandomPositions</span><span class="p">();</span>
<span class="n">copied_state</span><span class="p">.</span><span class="n">update</span><span class="p">();</span>
<span class="kt">bool</span> <span class="n">constrained</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">isStateConstrained</span><span class="p">(</span><span class="n">copied_state</span><span class="p">,</span> <span class="n">goal_constraint</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 8: Random state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">constrained</span> <span class="o">?</span> <span class="s">&quot;constrained&quot;</span> <span class="o">:</span> <span class="s">&quot;not constrained&quot;</span><span class="p">));</span>
</pre></div>
</div>
<p>There&#8217;s a more efficient way of checking constraints (when you want
to check the same constraint over and over again, e.g. inside a
planner). We first construct a KinematicConstraintSet which
pre-processes the ROS Constraints messages and sets it up for quick
processing.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">kinematic_constraints</span><span class="o">::</span><span class="n">KinematicConstraintSet</span> <span class="n">kinematic_constraint_set</span><span class="p">(</span><span class="n">kinematic_model</span><span class="p">);</span>
<span class="n">kinematic_constraint_set</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">goal_constraint</span><span class="p">,</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">getTransforms</span><span class="p">());</span>
<span class="kt">bool</span> <span class="n">constrained_2</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">isStateConstrained</span><span class="p">(</span><span class="n">copied_state</span><span class="p">,</span> <span class="n">kinematic_constraint_set</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 9: Random state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">constrained_2</span> <span class="o">?</span> <span class="s">&quot;constrained&quot;</span> <span class="o">:</span> <span class="s">&quot;not constrained&quot;</span><span class="p">));</span>
</pre></div>
</div>
<p>There&#8217;s a direct way to do this using the KinematicConstraintSet
class.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">kinematic_constraints</span><span class="o">::</span><span class="n">ConstraintEvaluationResult</span> <span class="n">constraint_eval_result</span> <span class="o">=</span>
    <span class="n">kinematic_constraint_set</span><span class="p">.</span><span class="n">decide</span><span class="p">(</span><span class="n">copied_state</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 10: Random state is &quot;</span>
                <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">constraint_eval_result</span><span class="p">.</span><span class="n">satisfied</span> <span class="o">?</span> <span class="s">&quot;constrained&quot;</span> <span class="o">:</span> <span class="s">&quot;not constrained&quot;</span><span class="p">));</span>
</pre></div>
</div>
</div>
<div class="section" id="user-defined-constraints">
<h4>User-defined constraints<a class="headerlink" href="#user-defined-constraints" title="Permalink to this headline">¶</a></h4>
<p>User defined constraints can also be specified to the PlanningScene
class. This is done by specifying a callback using the
setStateFeasibilityPredicate function. Here&#8217;s a simple example of a
user-defined callback that checks whether the &#8220;panda_joint1&#8221; of
the Panda robot is at a positive or negative angle:</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="kt">bool</span> <span class="nf">stateFeasibilityTestExample</span><span class="p">(</span><span class="k">const</span> <span class="n">robot_state</span><span class="o">::</span><span class="n">RobotState</span><span class="o">&amp;</span> <span class="n">kinematic_state</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">verbose</span><span class="p">)</span>
<span class="p">{</span>
  <span class="k">const</span> <span class="kt">double</span><span class="o">*</span> <span class="n">joint_values</span> <span class="o">=</span> <span class="n">kinematic_state</span><span class="p">.</span><span class="n">getJointPositions</span><span class="p">(</span><span class="s">&quot;panda_joint1&quot;</span><span class="p">);</span>
  <span class="k">return</span> <span class="p">(</span><span class="n">joint_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mf">0.0</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Now, whenever isStateFeasible is called, this user-defined callback
will be called.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="n">planning_scene</span><span class="p">.</span><span class="n">setStateFeasibilityPredicate</span><span class="p">(</span><span class="n">stateFeasibilityTestExample</span><span class="p">);</span>
<span class="kt">bool</span> <span class="n">state_feasible</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">isStateFeasible</span><span class="p">(</span><span class="n">copied_state</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 11: Random state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">state_feasible</span> <span class="o">?</span> <span class="s">&quot;feasible&quot;</span> <span class="o">:</span> <span class="s">&quot;not feasible&quot;</span><span class="p">));</span>
</pre></div>
</div>
<p>Whenever isStateValid is called, three checks are conducted: (a)
collision checking (b) constraint checking and (c) feasibility
checking using the user-defined callback.</p>
<div class="highlight-c++"><div class="highlight"><pre><span class="kt">bool</span> <span class="n">state_valid</span> <span class="o">=</span> <span class="n">planning_scene</span><span class="p">.</span><span class="n">isStateValid</span><span class="p">(</span><span class="n">copied_state</span><span class="p">,</span> <span class="n">kinematic_constraint_set</span><span class="p">,</span> <span class="s">&quot;panda_arm&quot;</span><span class="p">);</span>
<span class="n">ROS_INFO_STREAM</span><span class="p">(</span><span class="s">&quot;Test 12: Random state is &quot;</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">state_valid</span> <span class="o">?</span> <span class="s">&quot;valid&quot;</span> <span class="o">:</span> <span class="s">&quot;not valid&quot;</span><span class="p">));</span>
</pre></div>
</div>
<p>Note that all the planners available through MoveIt! and OMPL will
currently perform collision checking, constraint checking and
feasibility checking using user-defined callbacks.</p>
</div>
</div>
</div>
<div class="section" id="the-launch-file">
<h2>The launch file<a class="headerlink" href="#the-launch-file" title="Permalink to this headline">¶</a></h2>
<p>The entire launch file is <a class="reference external" href="https://github.com/ros-planning/moveit_tutorials/tree/melodic-devel/doc/planning_scene/launch/planning_scene_tutorial.launch">here</a> on GitHub. All the code in this tutorial can be compiled and run from the moveit_tutorials package.</p>
</div>
<div class="section" id="running-the-code">
<h2>Running the code<a class="headerlink" href="#running-the-code" title="Permalink to this headline">¶</a></h2>
<p>Roslaunch the launch file to run the code directly from moveit_tutorials:</p>
<div class="highlight-python"><div class="highlight"><pre>roslaunch moveit_tutorials planning_scene_tutorial.launch
</pre></div>
</div>
</div>
<div class="section" id="expected-output">
<h2>Expected Output<a class="headerlink" href="#expected-output" title="Permalink to this headline">¶</a></h2>
<p>The output should look something like this, though we are using random
joint values so some things may be different.</p>
<div class="highlight-python"><div class="highlight"><pre>ros.moveit_tutorials: Test 1: Current state is not in self collision
ros.moveit_tutorials: Test 2: Current state is not in self collision
ros.moveit_tutorials: Test 3: Current state is not in self collision
ros.moveit_tutorials: Test 4: Current state is valid
ros.moveit_tutorials: Test 5: Current state is in self collision
ros.moveit_tutorials: Contact between: panda_leftfinger and panda_link1
ros.moveit_tutorials: Contact between: panda_link1 and panda_rightfinger
ros.moveit_tutorials: Test 6: Current state is not in self collision
ros.moveit_tutorials: Test 7: Current state is not in self collision
ros.moveit_tutorials: Test 8: Random state is not constrained
ros.moveit_tutorials: Test 9: Random state is not constrained
ros.moveit_tutorials: Test 10: Random state is not constrained
ros.moveit_tutorials: Test 11: Random state is feasible
ros.moveit_tutorials: Test 12: Random state is not valid
</pre></div>
</div>
<p><strong>Note:</strong> Don&#8217;t worry if your output has different ROS console format. You can customize your ROS console logger by following <a class="reference external" href="http://dav.ee/blog/notes/archives/898">this blog post</a>.</p>
</div>
</div>


            
            <div class="admonition note">
              <p class="first admonition-title">Open Source Feedback</p>
              <p class="last">See something that needs improvement? Please open a pull request on this <a href="https://github.com/ros-planning/moveit_tutorials/blob/melodic-devel/doc/planning_scene/planning_scene_tutorial.rst" class="fa fa-github"> GitHub page</a></p>
            </div>
            
           </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="../planning_scene_ros_api/planning_scene_ros_api_tutorial.html" class="btn btn-neutral float-right" title="Planning Scene ROS API" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="../robot_model_and_robot_state/robot_model_and_robot_state_tutorial.html" class="btn btn-neutral" title="Robot Model and Robot State" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
    </p>
  </div>
  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.

</footer>
        </div>
      </div>

    </section>

  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'../../',
            VERSION:'Kinetic',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
            HAS_SOURCE:  true
        };
    </script>
      <script type="text/javascript" src="../../_static/jquery.js"></script>
      <script type="text/javascript" src="../../_static/underscore.js"></script>
      <script type="text/javascript" src="../../_static/doctools.js"></script>

  

  
  
    <script type="text/javascript" src="../../_static/js/theme.js"></script>
  

  
  
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.StickyNav.enable();
      });
  </script>
   

</body>
</html>